package com.ddw.wotcg.client.threejs.core;

import com.ddw.wotcg.client.threejs.math.Matrix4;
import com.ddw.wotcg.client.threejs.math.Quaternion;
import com.ddw.wotcg.client.threejs.math.Vector3;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.core.client.JsArray;

/**
 * http://mrdoob.github.com/three.js/docs/55/#Reference/Core/Object3D
 * 
 * @author fungus1487
 * 
 */
public class Object3D extends JavaScriptObject {
	
	protected Object3D() {
	}
	
	public native final void add(Object3D object) /*-{
		this.add(object);
	}-*/;
	
	public native final double getBoundRadius() /*-{
		return this.boundRadius;
	}-*/;
	
	public native final double getBoundRadiusScale() /*-{
		return this.boundRadiusScale;
	}-*/;
	
	public native final boolean getCastShadow() /*-{
		return this.castShadow;
	}-*/;
	
	public native final Object3D getChildByName(String name, boolean recursive) /*-{
		return this.getChildByName(name, recursive);
	}-*/;
	
	public native final JsArray<Object3D> getChildren() /*-{
		return this.children;
	}-*/;
	
	public native final JsArray<Object3D> getDescendants() /*-{
		return this.getDescendants();
	}-*/;
	
	public native final JsArray<Object3D> getDescendants(JsArray<Object3D> array) /*-{
		return this.getDescendants(array);
	}-*/;
	
	public native final String getEulerOrder() /*-{
		return this.eulerOrder;
	}-*/;
	
	public native final boolean getFrustumCulled() /*-{
		return this.frustumCulled;
	}-*/;
	
	public native final int getId() /*-{
		return this.id;
	}-*/;
	
	public native final Matrix4 getMatrix() /*-{
		return this.matrix;
	}-*/;
	
	public native final boolean getMatrixAutoUpdate() /*-{
		return this.matrixAutoUpdate;
	}-*/;
	
	public native final Matrix4 getMatrixRotationWorld() /*-{
		return this.matrixRotationWorld;
	}-*/;
	
	public native final boolean getMatrixWorldNeedsUpdate() /*-{
		return this.matrixWorldNeedsUpdate;
	}-*/;
	
	public native final String getName() /*-{
		return this.name;
	}-*/;
	
	public native final Object3D getParent() /*-{
		return this.name;
	}-*/;
	
	public native final Vector3 getPosition() /*-{
		return this.position;
	}-*/;
	
	public native final Quaternion getQuaternion() /*-{
		return this.quaternion;
	}-*/;
	
	public native final boolean getReceiveShadow() /*-{
		return this.receiveShadow;
	}-*/;
	
	public native final double getRenderDepth() /*-{
		return this.renderDepth;
	}-*/;
	
	public native final Vector3 getRotation() /*-{
		return this.rotation;
	}-*/;
	
	public native final boolean getRotationAutoUpdate() /*-{
		return this.rotationAutoUpdate;
	}-*/;
	
	public native final Vector3 getScale() /*-{
		return this.scale;
	}-*/;
	
	public native final Vector3 getUp() /*-{
		return this.up;
	}-*/;
	
	public native final boolean getUseQuaternion() /*-{
		return this.useQuaternion;
	}-*/;
	
	public native final boolean getVisible() /*-{
		return this.visible;
	}-*/;
	
	public native final void lookAt(Vector3 vector) /*-{
		this.lookAt(vector);
	}-*/;
	
	public native final void remove(Object3D object) /*-{
		this.remove(object);
	}-*/;
	
	public native final void translate(float distance, Vector3 axis) /*-{
		this.translate(distance, axis);
	}-*/;
	
	public native final void translateX(float distance) /*-{
		this.translateX(distance);
	}-*/;
	
	public native final void translateY(float distance) /*-{
		this.translateY(distance);
	}-*/;
	
	public native final void translateZ(float distance) /*-{
		this.translateZ(distance);
	}-*/;
	
	public native final void updateMatrix() /*-{
		this.updateMatrix();
	}-*/;
	
	public native final void updateMatrixWorld(boolean force) /*-{
		this.updateMatrixWorld(force);
	}-*/;
	
}
